package com.fysports.web.controller.system;

import com.google.common.collect.Maps;
import com.jfinal.json.Json;
import com.jfinal.log.Log;
import com.jfinal.plugin.activerecord.Page;
import com.fysports.framework.kit.security.MD5Kit;
import com.fysports.web.controller.AbstractBaseController;
import com.fysports.web.controller.engine.RestFulController;
import com.fysports.web.kit.commons.PathBizKit;
import com.fysports.web.kit.commons.StringKit;
import com.fysports.web.kit.dtgrid.DTGridKit;
import com.fysports.web.kit.dtgrid.DTGridView;
import com.fysports.web.model.system.SystemUser;
import com.fysports.web.module.core.DefaultModuleBuilder;
import com.fysports.web.module.core.IModuleFactory;
import com.fysports.web.module.view.JsonView;
import com.fysports.web.module.view.OperateType;

import java.util.Map;


/**
 * 系统用户维护管理
 * Created by konbluesky
 * Date : 14-9-14 下午5:31
 * Project : JdmData_WebServer
 */
public class ManagerUserController extends AbstractBaseController implements RestFulController{
    private static Log logger = Log.getLog(ManagerUserController.class);
    IModuleFactory imf = new DefaultModuleBuilder();


    public void index() {
        imf.create(this);
        execute();
        setAttr("list", SystemUser.dao.search(SystemUser.COL_LIVEFLAG, 1));
        render(PathBizKit.getPageAdminPath("system/user/users_list.ftl"));
    }

    public void load() {
        DTGridView dtview = DTGridKit.toDtView(getPara(DTGridKit.PARAM_NAME));
        Map<String, Object> params = Maps.newHashMap();
        params.put(SystemUser.COL_LIVEFLAG, 1);
        Page<SystemUser> list = SystemUser.dao.searchPaginate(dtview.getNowPage(), dtview.getPageSize(), params);
        dtview = DTGridKit.toDtView(dtview,list);
        renderJson(Json.getJson().toJson(dtview));
    }
    @Override
    public void add() {
        setAttr("m", new SystemUser());
        render(PathBizKit.getPageAdminPath("system/user/users_add.ftl"));
    }

    @Override
    public void edit() {
        String uuid = getPara();
        SystemUser eo = SystemUser.dao.findById(uuid);
        setAttr("m", eo);
        render(PathBizKit.getPageAdminPath("system/user/users_update.ftl"));
    }

    @Override
    public void save() {
        /**
         * 如果上传时，表单类型为multipart/form-data 需要调用getFile方法
         * 摘文档：
         * 3.4 getFile 文件上传
         * Controller 提供了 getFile 系列方法支持文件上传。
         * 特别注意:如果客户端请求为 multipart request(form 表单使用了 enctype="multipart/form-data"),
         * 那么必须先调用 getFile 系列方法才 能使 getPara 系列方法正常工作,
         * 因为 multipart request 需要通过 getFile 系列方法解析请求体中 的数据,包括参数。
         */
        try {
            getFile();
        }
        catch (Exception e) {
            logger.error(e.getLocalizedMessage(), e);
        }

        SystemUser eo = getModel(SystemUser.class, "m");
        String pwd = eo.getStr("pwd");
        if (StringKit.isBlank("pwd")) {
            renderJson(new JsonView(false, OperateType.SAVE_FAIL));
            return;
        }
        else {
            eo.set(SystemUser.COL_PWD, MD5Kit.get32MD5(pwd));
        }
        boolean status = eo.save();
        JsonView json = new JsonView();
        json.setStatus(status);
        json.setMsg(status ? OperateType.SAVE_SUCCESS : OperateType.SAVE_FAIL);
        renderJson(json);
    }

    @Override
    public void update() {
        try {
            getFile();
        }
        catch (Exception e) {
            logger.error(e.getLocalizedMessage(), e);
        }
        SystemUser sm = getModel(SystemUser.class, "m");
        String pwd = sm.getStr("pwd");
        if (StringKit.isBlank("pwd")) {
            renderJson(new JsonView(false, OperateType.SAVE_FAIL));
            return;
        }
        else {
            //长度大于40 认为是加密
            if(pwd.length()>40) {
                sm.set(SystemUser.COL_PWD, pwd);
            }else{
                sm.set(SystemUser.COL_PWD, MD5Kit.get32MD5(pwd));
            }
        }
        boolean status = sm.update();
        JsonView json = new JsonView();
        json.setStatus(status);
        json.setMsg(status ? OperateType.UPDATE_SUCCESS : OperateType.UPDATE_FAIL);
        renderJson(json);
    }

    @Override
    public void delete() {
        String uuid = getPara();
        JsonView json = new JsonView();
        SystemUser sm = SystemUser.dao.findById(uuid);
        boolean status = false;
        if (sm != null) {
            sm.set(SystemUser.COL_LIVEFLAG, "0");
            status = sm.update();
        }
        json.setStatus(status);
        json.setMsg(status ? OperateType.OPERATE_SUCCESS : OperateType.OPERATE_FAIL);
        renderJson(json);
    }


    public void info() {
        String uuid = getPara();
        SystemUser sm = SystemUser.dao.searchFirst(SystemUser.COL_UUID, uuid);
        setAttr("m", sm);
        render(PathBizKit.getPageAdminPath("system/user/users_info.ftl"));
    }
}
